home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994…tember: Reference Library / Dev.CD Sep 94.toast / Periodicals / develop / develop Issue 11 / develop 11 code / The NetWork Project / Examples (Sources) / NetSim / generic.p < prev    next >
Encoding:
Text File  |  1992-07-15  |  7.7 KB  |  318 lines  |  [TEXT/MPS ]

  1.     
  2. {© G. Sawitzki, StatLab Heidelberg 1986-1989}
  3.  
  4. {contains Generic event handlers and higher level functions}
  5. {1/19/91 21:42:58    gs    removed initmenus, drawmenubar from setupthemenus}
  6. {13.2.1988 23:05:15 Uhr    gs    cut/copy… included}
  7.  
  8.     UNIT Generic;
  9.     INTERFACE
  10.         uses MacUnits,StdTools;
  11.  
  12.     CONST    { Menu Numbers}
  13.         mApple = 1;         { Apple menu ID. }
  14.         mFile = 2;         { File menu ID. }
  15.         mEdit = 3;         { Edit menu ID. }
  16.  
  17. procedure GenericApple (theitem: integer);
  18.  
  19. procedure SetUpTheMenus;
  20. procedure GenericDrag (theEvent: Eventrecord; theWindow: WindowPtr);
  21. PROCEDURE GenericMousedown (theEvent : Eventrecord; theWindow : WindowPtr);
  22. PROCEDURE GenericGrowwindow (theEvent : Eventrecord; theWindow : WindowPtr);
  23. {Handle mousedown in grow}
  24. PROCEDURE GenericZoomWindow(fwreturncode:integer;theEvent : Eventrecord;theWindow : WindowPtr);
  25.  
  26. PROCEDURE GenericGoaway (VAR theWindow : WindowPtr);
  27.  
  28. PROCEDURE GenericActivate (theWindow : WindowPtr);
  29.  
  30. PROCEDURE GenericDeactivate (theWindow : WindowPtr);
  31.  
  32. procedure GenericUpdate (theWindow: WindowPtr);
  33. procedure GenericDiskEvent (Message: Longint);
  34. procedure updatecursor;
  35. procedure GenericKeydown (theEvent: Eventrecord);
  36. procedure GenericFprint (opnorpr, nrfils: integer); {Finder print}
  37. procedure GenericEdit (theitem: integer);
  38.  
  39.  
  40. implementation
  41.  
  42. procedure GenericAbout;
  43.     var
  44.         abType: ResType;
  45.         abName: Str255;
  46.         h: Handle;
  47.         scri, AboutId: integer;
  48.     begin
  49.     {No names yet. To be changed…}
  50.     {  h:=getNamedResource('ALRT','About');}
  51.     {Translate Name to number}
  52.     { if h=nil then OsCheck('Bad About..',ResError);}
  53.     {    getResInfo(h,AboutId,abType,abName);}
  54.         AboutId := 130;
  55.         scri := StdAlert(AboutId, NoIcon);
  56.     end;
  57.  
  58. procedure GenericApple; {Generic Response to Apple Menu selection}
  59.     var
  60.         Name: Str255;
  61.         refnum: integer;
  62.     begin
  63.         if theitem = 1 then
  64.             GenericAbout {  "About this program..." }
  65.         else
  66.         begin       { Otherwise find and open the desk accessory. }
  67.             getitem(GetMHandle(mApple), theitem, Name);
  68.             refnum := opendeskacc(Name);
  69.         end;
  70.     end;
  71.  
  72. {-------------------------------------------------------------------}
  73. {init the user menus and draw menu bar. }
  74.  
  75. procedure SetUpTheMenus;{24.5.87}
  76.     const
  77.         mbarDisplayed = 128;
  78.     var
  79.         myHandle: MenuHandle;
  80.         i: integer;
  81.         laastMenu: integer;
  82.         mbar: Handle;
  83.     begin
  84.         mbar := GetNewMBar(mbarDisplayed);
  85.         if mbar <> nil then
  86.         begin
  87.             setMenubar(mbar);
  88.             disposHandle(mbar);
  89.         end;
  90.         myHandle := getMenu(mApple);        { Get the Apple menu. }
  91.         if myHandle <> nil then
  92.             addresMenu(myHandle, 'DRVR');    { Add in the desk accessories. }
  93.     end;
  94.  
  95. procedure GenericDrag (theEvent: Eventrecord; theWindow: WindowPtr);
  96.     begin { If in the drag bar, let her drag it around. }
  97.         if theWindow <> nil then
  98.         begin {26.11.1990 0:49:29 Uhr    gs    }
  99.             {make front, if not command pressed}
  100.             if (theWindow <> frontwindow) and (bitand(theEvent.modifiers, cmdkey) = 0) then
  101.                 selectwindow(theWindow);
  102.             dragwindow(theWindow, theEvent.where, system.dragrect);
  103.         end;
  104.     end;
  105.  
  106.     PROCEDURE GenericMousedown(theEvent : Eventrecord; theWindow : WindowPtr);
  107.         VAR itemHit : integer;
  108.     {Handle mousedown in content}
  109.     BEGIN
  110.         IF isDialogEvent(theEvent) then 
  111.             begin
  112.              if DialogSelect(theEvent, theWindow, itemHit) THEN
  113.                 BEGIN
  114.                     CASE itemHit OF
  115.                         ok : BEGIN END;
  116.     
  117.                         cancel :  BEGIN END;
  118.                         OTHERWISE
  119.                     END;
  120.                 END{IsDialogSelect};
  121.             END{isDialogEvent}
  122.  
  123.         ELSE
  124.             BEGIN {no dialog event} END;
  125.     END;
  126.  
  127.     PROCEDURE GenericGrowwindow;{ (theEvent : Eventrecord;theWindow : WindowPtr)}
  128.     {Handle mousedown in grow}
  129.     BEGIN END;
  130.     
  131.     PROCEDURE GenericZoomWindow(fwreturncode:integer;theEvent : Eventrecord;theWindow : WindowPtr);
  132.     BEGIN END;
  133.  
  134.     PROCEDURE GenericGoaway; { (var theWindow : WindowPtr)}
  135.     {will be called before the window is disposed}
  136.     BEGIN END;
  137.  
  138.     PROCEDURE GenericActivate; {(theWindow : WindowPtr)}
  139.     BEGIN END;
  140.  
  141.     PROCEDURE GenericDeactivate; {(theWindow : WindowPtr)}
  142.     BEGIN END;
  143.  
  144.  
  145. procedure GenericUpdate; {(theWindow : WindowPtr)}
  146.     begin
  147. {    beginupdate(theWindow);}
  148.         if theWindow <> nil then
  149.             drawcontrols(theWindow);{26.11.1990 1:00:09 Uhr    gs    }
  150. {    endupdate(theWindow);}
  151.     end;
  152.  
  153. procedure GenericDiskEvent;{(Message:Longint)}
  154.     var
  155.         dierr: integer;       { code returned by diskinit }
  156.     begin { Disk insertion event: }
  157.         if hiword(Message) <> NoErr then
  158.             dierr := dibadmount(system.SFPutPoint, Message);
  159.     end;
  160.  
  161. procedure updatecursor;
  162.     begin
  163.     end;
  164.  
  165. {procedure GenericKeydown(key:char;theEvent: Eventrecord);}
  166. {begin end;}
  167.  
  168. procedure GenericKeydown; { (theEvent : Eventrecord)}
  169.     type
  170.         trick = packed record
  171.                 case boolean of
  172.                     true: (
  173.                             long: Longint
  174.                     );
  175.                     false: (
  176.                             chr3, chr2, chr1, chr0: char
  177.                     )
  178.             end;
  179.  
  180.     var
  181.         itemHit: integer;
  182.         TrickVar: trick;
  183.         charCode: char;
  184.         dummy: boolean;
  185.     begin
  186.         if isDialogEvent(theEvent) then
  187.         begin
  188.             TrickVar.long := theEvent.Message;
  189.             charCode := TrickVar.chr0;
  190.             if (charCode = chr(3)) or (charCode = chr($0D)) then
  191.             begin
  192.   {same as ok}
  193.   {---- open problem: how do you find the dialog ?}
  194.             end;{newvalues}
  195.             ;
  196.         end;{dialogEvent}
  197.     end;
  198.  
  199. procedure GenericFprint; {(opnorpr, nrfils : integer)}
  200.  {Finder print}
  201.     begin
  202.     end;
  203.  
  204. procedure GenericPictEdit (var pic: PicHandle; owner: ptr; Action: cmdnumber);
  205.     {perform a default cut/copy/paste/clear for pictures, with simple undo}
  206.     
  207.     var
  208.         pHndl: Handle;
  209.         length, offset: Longint;
  210.         info: Handle;
  211.         infoType: ResType;
  212.         UndoOwner: ptr;
  213.  
  214.     begin
  215.         if pic = nil then
  216.             length := 0
  217.         else
  218.             length := getHandleSize(Handle(pic));
  219.         case Action of
  220.             cUndo: 
  221.             begin
  222.                 if GetUndo(info, infoType, UndoOwner, Action) = NoErr then
  223.                     if (infoType = 'PICT') and (owner = UndoOwner) and (Action = cPaste) then
  224.                     begin                                 {save present picture}
  225.                         if PutUndo(Handle(pic), 'PICT', owner, cPaste) <> NoErr then {error handling}
  226.                             ;
  227.                         killPicture(pic);
  228.                         pic := PicHandle(info);            {glue undo picture}
  229.                     end;
  230.             end;
  231.  
  232.             cCut: 
  233.                 if pic <> nil then
  234.                 begin
  235.                     if PutUndo(Handle(pic), 'PICT', owner, cPaste) <> NoErr then {error handling}
  236.                         ;
  237.                     if ZeroScrap <> NoErr then {error handling}
  238.                         ;
  239.                     if putscrap(length, 'PICT', ptr(pic^)) <> NoErr then
  240.                         ;{error handling}
  241.                     killPicture(pic);
  242.                     pic := nil;
  243.                 end;
  244.             cCopy: 
  245.                 if pic <> nil then
  246.                 begin
  247.                     ForgetUndo;
  248.                     if ZeroScrap <> NoErr then {error handling}
  249.                         ;
  250.  
  251.                     if putscrap(length, 'PICT', ptr(pic^)) <> NoErr then
  252.                         ;{error handling}
  253.             {Danger: putscrap may change the heap}
  254.                 end;
  255.             cPaste: 
  256.             begin
  257.                 pHndl := NewHandle(0);
  258.                 if pHndl <> nil then
  259.                 begin
  260.                     length := GetScrap(pHndl, 'PICT', offset);
  261.                     if length < 0 then     {error handling}
  262.                     else if length > 0 then     {no error, and got info}
  263.                     begin
  264.                         if PutUndo(Handle(pic), 'PICT', owner, cPaste) <> NoErr then {error handling}
  265.                             ;
  266.                         killPicture(pic);
  267.                         pic := PicHandle(pHndl);
  268.                     end;
  269.                 end;
  270.             end;
  271.             cClear: 
  272.             begin
  273.                 if PutUndo(Handle(pic), 'PICT', owner, cPaste) <> NoErr then {error handling}
  274.                     ;
  275.                 killPicture(pic);
  276.                 pic := nil;
  277.             end;
  278.             otherwise
  279.         end;{case}
  280.     end;
  281.  
  282. procedure GenericEdit; {(theitem : integer)}
  283.     {Default edit menu Action; supports only windows with registered pictures}
  284.  
  285.     var
  286.         cmd: cmdnumber;
  287.         oldpic, pic: PicHandle;
  288.         safeport: grafptr;
  289.         s: Str255;
  290.         myself: ptr;
  291.         tempfrontwindow: windowptr;
  292.     begin
  293.         getport(safeport);
  294.         tempFrontWindow := frontWindow;{26.11.1990 0:48:47 Uhr    gs    }
  295.         if tempFrontWindow <> nil then
  296.         begin
  297.             setport(tempFrontWindow);
  298.             myself := ptr(tempFrontWindow);
  299.  
  300.             cmd := theitem + ceditbase - 1;
  301.             oldpic := Getwindowpic(tempFrontWindow);
  302.             pic := oldpic;
  303.             GenericPictEdit(pic, myself, cmd);
  304.  
  305.             if pic <> oldpic then
  306.             begin
  307.                 setwindowpic(tempFrontWindow, pic);
  308.                 with tempFrontWindow^ do
  309.                 begin
  310.                     eraserect(portrect);
  311.                     invalrect(portrect); 
  312.                 end;
  313.             end;
  314.             setport(safeport);
  315.         end;
  316.     end;
  317.  
  318. end.